import { createStore, applyMiddleware, compose } from '../redux'
// import { createStore, applyMiddleware } from 'redux'
import reducer from './reducer'
import { createAddUserAction } from './action/usersAction'

// /**
//  * 一个中间件函数
//  * @param {*} store
//  */
// // function log1(store) { // 获取仓库的
// //     return function createDispatch(dispatch) {
// //         console.log('中间件1 create');
// //         // 下面返回的函数，是最终要应用的dispatch
// //         return function (action) {
// //             console.log('中间件1');
// //             dispatch(action)
// //         }
// //     }
// // }
// const log1 = store => next => action => {
//     console.log('中间件1');
//     next(action)
// }

// // function log2(store) {
// //     return function (dispatch) {
// //         console.log('中间件2 create');
// //         return function (action) {
// //             console.log('中间件2');
// //             dispatch(action)
// //         }
// //     }
// // }

// const log2 = store => next => action => {
//     console.log('中间件2');
//     next(action)
// }

// // 最后一个参数是函数代表应用中间件
// const store = createStore(reducer, applyMiddleware(log1, log2))

// // 执行顺序
// // applyMiddleware 调用 log2 返回的函数，传入store.dispatch, 返回一个函数 newDispatch1
// // 调用 log1 返回的函数, 传入newDispatch1, 返回一个函数 newDispatch2
// // ...
// // 直到第一个中间件函数 返回的 newDispatch，赋值给 store.dispatch

// // 中间件2 create, 中间件1 create

// store.dispatch(createAddUserAction({ id: 99, name: 'xx', age: 99 }))
// // 中间件1, 中间件2



// const log1 = store => next => action => {
//     console.log('中间件1');
//     next(action)
// }
// const log2 = store => next => action => {
//     console.log('中间件2');
//     next(action)
// }

function log1(store) { // 获取仓库的
    return function createDispatch(dispatch) {
        console.log('中间件1 create');
        // 下面返回的函数，是最终要应用的dispatch
        return function (action) {
            console.log('中间件1');
            dispatch(action)
        }
    }
}

function log2(store) {
    return function (dispatch) {
        console.log('中间件2 create');
        return function (action) {
            console.log('中间件2');
            dispatch(action)
        }
    }
}
// 创建一个仓库
const store = applyMiddleware(log1, log2)(createStore)(reducer)
console.log(store);
store.dispatch(createAddUserAction({ id: 99, name: 'xx', age: 99 }))